const fp = require('lodash/fp')
//数据
//horsepower 马力, dollar_value 价格, in_stock 库存
const cars = [{name: 'Farrari FF', horsepowe: 660, dollar_value: 700000, in_stock: true},
              {name: 'Spyker C12', horsepowe: 650, dollar_value: 648000, in_stock: false},
              {name: 'Jaguar KXR-S', horsepowe: 550, dollar_value: 132000, in_stock: false},
              {name: 'Audi R8', horsepowe: 525, dollar_value: 114200, in_stock: false},
              {name: 'Aston Martin one-77', horsepowe: 750, dollar_value: 1850000, in_stock: true},
              {name: 'Pagani Huayra', horsepowe: 700, dollar_value: 1300000, in_stock: false}]

//练习题1:使用函数组合fp.flowRight()重新实现下面函数
let isLastInstock = function(cars){
    //获取最后一条数据
    let last_car = fp.last(cars)
    //获取最后一条数据的in_stock属性值 
    return fp.prop('in_stock', last_car)
}
//答
let isLastInstockFlowRight = fp.flowRight([fp.prop('in_stock'),fp.last])
// console.log(isLastInstockFlowRight(cars))

// 练习题2:使用fp.flowRight()、fp.prop()和fp.first()获取第一个car的name
//答
let firstCarName = fp.flowRight(fp.prop('name'),fp.first)
// console.log(firstCarName(cars))

// 练习题3:使用帮助函数_average重构averageDollarValue,使用函数组合的实现方式
let _average = function(xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length
}//<--无需改动
let averageDollarValue = function(cars){
    let dollar_values = fp.map(function(car){
        return car.dollar_value
    }, cars)
    return _average(dollar_values)
}
// console.log(averageDollarValue(cars))
//答
let getCarDollarValue = function(car){ return car.dollar_value}
let valueAverage = fp.flowRight(_average,fp.map(getCarDollarValue))
// console.log(valueAverage(cars))

// 练习题4:使用flowRight写一个sanitizeNames()函数，返回一个下划线连接的小写字符串，把数据中的name转换为这种形式，例如:sanitizeNames(["Hello world"]) => ["hello_world"]
let _underscore = fp.replace(/\s+/g, '_')//<-- 无需改动，并在sanitizeNames中使用它
//答
let sanitizeNames = fp.flowRight(fp.toLower, _underscore, fp.map(fp.prop('name')))
console.log(sanitizeNames(cars)) // farrari_ff,spyker_c12,jaguar_kxr-s,audi_r8,aston_martin_one-77,pagani_huayra


